iT邦幫忙

0

【ROS 教學 part 5】Publisher, Subscriber

  • 分享至 

  • xImage
  •  

Publisher

roscd tutorial/          # 進入 tutorial package
cd src                   # 進入 src
touch hello_publisher.py # 創建 hello_publisher.py 檔案

撰寫

#! /usr/bin/env python
# 指定直譯器

# 1. import
import rospy
from std_msgs.msg import String

# 2. 編寫 main
if __name__ == "__main__":

	# 3. 建立 Publisher 前要先建立一個 Node
	## 初始化 ROS 節點
	rospy.init_node("publish", anonymous = True)  # 建立一個 Node 要先給名稱

	# 4. 建立一個 Publisher
	pub = rospy.Publisher("chat", String, queue_size = 10)  # 必須寫出 Topic 的名稱叫什麼

	# 5. 連續發送訊息
	rate = rospy.Rate(10)  # 以 10Hz 的頻率發送訊息

	# 6. 進入迴圈,如果沒有按下 ctrl+c 就一直執行
	while not rospy.is_shutdown():
		hello = 'hello world ! %s' % rospy.get_time()  # 一直傳送的訊息
		pub.publish(hello)  # 發送訊息,目前螢幕上還看不到
		# 7. 輸出
		rospy.loginfo(hello)
		rate.sleep()

更改權限並執行

roscd tutorial/                    # 進入 tutorial package
cd src                             # 進入 src
chmod +x hello_publisher.py        # 更改 hello_publisher.py 的權限變成可執行檔
rosrun tutorial hello_publisher.py # 執行 hello_publisher.py 檔案

Subscriber

roscd tutorial/           # 進入 tutorial package
cd src                    # 進入 src
touch hello_subscriber.py # 創建 hello_subscriber.py 檔案

撰寫

#! /usr/bin/env python
# 指定直譯器

# 1. import
import rospy
from std_msgs.msg import String

# 6. callback 函數
def callback(data):
	# 把接收到的訊息顯示在螢幕上

	rospt.loginfo(rospy.get_caler_id() + 'I heard %s' % data.data)


# 2. 編寫 main
if __name__ == "__main__":

	# 3. 建立 Subsciber 前要先建立一個 Node
	# 初始化 ROS 節點
	rospy.init_node("Subsciber", anonymous = True)  # 建立一個 Node 要先給名稱

	# 4. 建立一個 Subscriber
	rospy.Subscriber("chat", String, callback)  
	# 必須寫出訂閱了什麼 Topic
	# 我們必須寫出 Subscriber 如果接收到訊息要做出什麼樣的反應(callback 函數)
	
	# 5. 防止程式結束
	rospy.spin()

更改權限並執行

roscd tutorial/                    # 進入 tutorial package
cd src                             # 進入 src
chmod +x hello_publisher.py        # 更改 hello_publisher.py 的權限變成可執行檔
rosrun tutorial hello_publisher.py # 執行 hello_publisher.py 檔案

Reference

AI葵 ROS教學


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言